home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 46
/
Aminet 46 (2001)(GTI - Schatztruhe)[!][Dec 2001].iso
/
Aminet
/
text
/
edit
/
edt10src.lha
/
txt
/
Menus.mod
< prev
next >
Wrap
Text File
|
1995-04-09
|
3KB
|
148 lines
(*
.name Menus
.task arexx commands for creating menus
.release 1.0
.language Oberon-2
.translator Amiga Oberon 3.2
.system req. AmigaOS 2.04 or higher
.author Joachim Barheine
.address Hochgrevestr. 3, 38640 Goslar
.copyright (c) 1995 by J.Barheine
*)
(* .info: 31/03/95, 16:40:04, version 1 *)
MODULE Menus;
IMPORT
SYS:= SYSTEM,
CN:= CmdNodes,
IO:= IOServer,
K:= Kernel,
Key:= Keymapping,
Rx:= ERexx,
S:= Strings,
Str:= StrPool,
Util:= Utility,
W:= Windows;
VAR
menuInfo: K.DynArray;
iconsItem-, insertItem-, wordWrapItem-, autoIndentItem-, cleanLinesItem-: INTEGER;
PROCEDURE* DoMenu(w: IO.Window; id: INTEGER): SHORTINT;
VAR
n: CN.CmdNode;
BEGIN
n:= menuInfo.Get(id)(CN.CmdNode);
IF CN.ExecRexx(w(W.Window), n.string^, n.isFile) THEN
RETURN CN.HandleRexx(w(W.Window));
ELSE
RETURN IO.msgLocal;
END;
END DoMenu;
PROCEDURE Register(id: INTEGER; cmdStr: ARRAY OF CHAR);
VAR
l: LONGINT;
(* $CopyArrays- *)
BEGIN
l:= S.Length(cmdStr);
IF l <= 27 THEN (* remove quotes *)
WHILE (l > 2) & (cmdStr[0] = '"') OR (cmdStr[0] = "'") OR (cmdStr[0] = "`") DO
DEC(l, 2);
K.Copy(cmdStr, 1, cmdStr, 0, l);
cmdStr[l]:= 0X;
END;
IF Util.Stricmp(cmdStr, "Set INSERT TOGGLE") = 0 THEN
insertItem:= id;
ELSIF Util.Stricmp(cmdStr, "Set AUTOINDENT TOGGLE") = 0 THEN
autoIndentItem:= id;
ELSIF Util.Stricmp(cmdStr, "Set WORDWRAP TOGGLE") = 0 THEN
wordWrapItem:= id;
ELSIF Util.Stricmp(cmdStr, "Set ICONS TOGGLE") = 0 THEN
iconsItem:= id;
ELSIF Util.Stricmp(cmdStr, "Set CLEANLINES TOGGLE") = 0 THEN
cleanLinesItem:= id;
END;
END;
END Register;
PROCEDURE AddItem* (title, shortCut, cmdStr: ARRAY OF CHAR; isFile: BOOLEAN);
VAR
string: K.DynString;
(* $CopyArrays- *)
BEGIN
NEW(string, S.Length(cmdStr) + 1);
COPY(cmdStr, string^);
menuInfo.Put(CN.CreateNode(string, K.undef, isFile, FALSE),
IO.AddItem(title, shortCut, DoMenu));
END AddItem;
PROCEDURE AddSubItem* (title, shortCut, cmdStr: ARRAY OF CHAR; isFile: BOOLEAN);
VAR
string: K.DynString;
(* $CopyArrays- *)
BEGIN
NEW(string, S.Length(cmdStr) + 1);
COPY(cmdStr, string^);
menuInfo.Put(CN.CreateNode(string, K.undef, isFile, FALSE),
IO.AddSub(title, shortCut, DoMenu));
END AddSubItem;
PROCEDURE AddChkItem* (title, shortCut, cmdStr: ARRAY OF CHAR;
isFile, global, checked: BOOLEAN): INTEGER;
VAR
string: K.DynString;
id: INTEGER;
(* $CopyArrays- *)
BEGIN
NEW(string, S.Length(cmdStr) + 1);
COPY(cmdStr, string^);
id:= IO.AddChkItem(title, shortCut, DoMenu, global, checked);
menuInfo.Put(CN.CreateNode(string, K.undef, isFile, global), id);
Register(id, cmdStr);
RETURN id;
END AddChkItem;
PROCEDURE AddChkSubItem* (title, shortCut, cmdStr: ARRAY OF CHAR;
isFile, global, checked: BOOLEAN): INTEGER;
VAR
string: K.DynString;
id: INTEGER;
(* $CopyArrays- *)
BEGIN
NEW(string, S.Length(cmdStr) + 1);
COPY(cmdStr, string^);
id:= IO.AddChkSub(title, shortCut, DoMenu, global, checked);
menuInfo.Put(CN.CreateNode(string, K.undef, isFile, global), id);
Register(id, cmdStr);
RETURN id;
END AddChkSubItem;
BEGIN
insertItem:= K.undef;
autoIndentItem:= K.undef;
wordWrapItem:= K.undef;
cleanLinesItem:= K.undef;
iconsItem:= K.undef;
menuInfo.New(20, 10);
END Menus.